PROC Petrol:
	GLOBAL Day&(11),Month&(11)
	GLOBAL Cost(11),Price(11)
	GLOBAL Mileage(11),id1%,id2%
	GLOBAL Flag%,Data%,A%,K%,M%
	GLOBAL pt1&(7),pt2&(7),pt3&(8)
	GLOBAL Errflag%,Dev$(5)
	Load:
	Display:
	WHILE K%<> 9999
		K%=0 : M%=0 : K%=GET
		IF K%=290
			mINIT
			mCARD "Menu","New Entry",%e,"Update Entry",%u,"Format",%f,"Exit",%x
			M% = DIALOG OR $20
		ENDIF
		IF M%=120 OR K%=632
			Exit:
		ENDIF
		IF M%=117 OR K%=629
			Update:
		ENDIF
		IF M%=101 OR K%=613
			Enter:
		ENDIF
		IF M%=102 OR K%=614
			IF Flag%=1
				Flag%=4.545454
			ELSE
				Flag%=1
			ENDIF
			Data%=-1
			gUSE id2% : gCLS : gBORDER 1
			Top:
			Details:
		ENDIF
	ENDWH
ENDP

PROC Exit:
	LOCAL A%
	IF Data%=-1
		A%=Query:("Exit Menu","Save New Values ?")
		IF A%=-1
			Save:
		ENDIF
	ENDIF
	STOP
ENDP

PROC Update:
	A%=2
	dINIT "Update Values"
	dCHOICE A%,"Line Number ","1,2,3,4,5,6,7,8,9"
	IF DIALOG
		A%=A%+1
		dINIT "Update Values"
		dLONG Day&(A%),"Day ",0,99
		dLONG Month&(A%),"Month ",0,99
		dFLOAT Cost(A%),"Total Cost ",0,9999
		IF Flag%=1
			dFLOAT Price(A%),"Price/Gallon ",0,9999
		ELSE
			Price(A%)=Price(A%)/Flag%
			dFLOAT Price(A%),"Price/Litre ",0,9999
		ENDIF
		dFLOAT Mileage(A%),"Mileage ",0,999999
		IF DIALOG
			Price(A%)=Price(A%)*Flag%
			Details:
			Data%=-1
		ENDIF
	ENDIF
ENDP

PROC Enter:
	LOCAL Q%
	dINIT "Enter Values"
	Day&(11)=DAY : Month&(11)=MONTH
	dLONG Day&(11),"Day ",0,99
	dLONG Month&(11),"Month ",0,99
	dFLOAT Cost(11),"Total Cost ",0,9999
	IF Flag%=1
		dFLOAT Price(11),"Price/Gallon ",0,9999
	ELSE
		dFLOAT Price(11),"Price/Litre ",0,9999
	ENDIF
	dFLOAT Mileage(11),"Mileage ",0,999999
	IF DIALOG
		Price(11)=Price(11)*Flag%
		Q%=Query:("Update Menu","Update Values ?")
		IF Q%=-1
			A%=2
			Data%=-1
			DO
				Day&(A%-1)=Day&(A%)
				Month&(A%-1)=Month&(A%)
				Cost(A%-1)=Cost(A%)
				Price(A%-1)=Price(A%)
				Mileage(A%-1)=Mileage(A%)
				A%=A%+1
			UNTIL A%=12
		ENDIF
		Details:
	ENDIF
ENDP

PROC Display:
	gSETWIN 0,0,410,160
	SCREEN 30,10
	CLS
	id1%=gCREATE(0,0,410,36,1)
	gAT 200,4 : gCLOCK ON,$31
	Top:
	id2%=gCREATE(0,38,410,122,1)
	gBORDER 0
	STATUSWIN ON
	Details:
ENDP

PROC Top:
	gUSE id1%
	gCLS 
	gBORDER 1
	gAT 12,14 
	gPRINT "Petrol Manager"
	gAT 270,18 : gPRINT "Total            "
	IF Flag%=1
		gPRINT "MPG"
	ELSE
		gPRINT "MPL"
	ENDIF
	gAT 10,31
	gPRINT "Date    Price          Cost    "
	IF Flag%=1
		gPRINT "Gallons"
	ELSE
		gPRINT "  Litres "
	ENDIF
	gPRINT "   Miles    Mileage    Spot  Rolling"
ENDP

PROC Details:
	LOCAL A%,G,G1,M,GasT
	gUSE id2%
	gCLS : gFONT 6
	gBORDER 1
	gAT 10,10
	gSTYLE 0
	GasT=0
	A%=2
	DO
		gAT 5,(A%-1)*13
		IF Day&(A%)<10
			gPRINT "  ";
		ENDIF
		gPRINT GEN$(Day&(A%),-2);"/"
		gPRINT Month&(A%)
		gAT 50,(A%-1)*13
		gPRINT "œ";
		gPRINT FIX$(Price(A%)/Flag%,2,5),"     "
		IF Cost(A%)>9.99
			gPRINT "œ"
		ELSE
			gPRINT " œ"
		ENDIF
		gPRINT FIX$(Cost(A%),2,5),"     "
		IF Price(A%)<>0
			G = Cost(A%)/Price(A%)
		ELSE
			G = 0
		ENDIF
		GasT = GasT + G
		G1 = G*Flag%
		IF G1<10 
			gPRINT "   "
		ENDIF
		gPRINT FIX$(G1,1,4),"     "
		M=Mileage(A%)-Mileage(A%-1)
		gPRINT FIX$(M,0,6),"     "
		gPRINT Mileage(A%),"     "
		IF G1<>0
			M = (Mileage(A%)-Mileage(A%-1))/G1
		ELSE
			M = 0
		ENDIF
		IF M<10
			gPRINT "   "
		ENDIF
		gPRINT FIX$(M,1,4),"     "
		IF GasT<>0
			M = (Mileage(A%)-Mileage(1))/GasT
		ELSE
			M = 0
		ENDIF
		M = M/Flag%
		IF M<10
			gPRINT " "
		ENDIF
		gPRINT FIX$(M,1,5)
		A%=A%+1
	UNTIL A%=11   
ENDP

PROC Load:
	LOCAL Miles
	Dev$="M:"
	DO
		TRAP OPEN Dev$+"\OPD\Petrol.dat",A,F1,F2,F3,F4,F5,F6
		IF ERR
			Dev$="A:"
		ELSE
			BREAK
		ENDIF
		TRAP OPEN Dev$+"\OPD\Petrol.dat",A,F1,F2,F3,F4,F5,F6
		IF ERR
			Dev$="B:"
		ELSE
			BREAK
		ENDIF
		TRAP OPEN Dev$+"\OPD\Petrol.dat",A,F1,F2,F3,F4,F5,F6
		IF ERR
			dINIT "Warning"
			dTEXT "","Data file not found"
			dTEXT "","Is this the initial"
			dTEXT "","run of the program ?"
			dBUTTONS "No",%n,"Yes",%y
			IF DIALOG=%y
				dINIT "Initialize data file"
				dFLOAT Miles,"Mileage at last fillup",0,99999
				DIALOG
			ELSE
				dINIT "Warning"
				dTEXT "","Program couldn't find PETROL.DAT"
				dTEXT "","in the .OPD subdirectory. You"
				dTEXT "","appear to have a problem !!"
				DIALOG
				STOP
			ENDIF
			A%=1 : Data%=-1 : Errflag%=-1 : Dev$="M:"
			DO
				Day&(A%)     = 0
				Month&(A%)   = 0
				Cost(A%)     = 0
				Price(A%)    = 0
				Mileage(A%)  = Miles
				Flag%        = 1
				A%=A%+1
			UNTIL A%=11
			GOTO Quit::
		ELSE
			BREAK
		ENDIF
		BREAK
	UNTIL 0
	A%=1
	Flag%=1
	DO
		Day&(A%)     = A.F1
		Month&(A%)   = A.F2
		Cost(A%)     = A.F3
		Price(A%)    = A.F4
		Mileage(A%)  = A.F5
		Flag%        = A.F6
		A%=A%+1
		NEXT
	UNTIL A%=11
	CLOSE
	Quit::
	Data%=0
ENDP

PROC Save:
	IF NOT Errflag%
		DELETE Dev$+"\OPD\Petrol.dat"
	ELSE
		Errflag%=0
	ENDIF
	CREATE Dev$+"\OPD\Petrol.dat",A,F1,F2,F3,F4,F5,F6
	A%=1
	DO
		A.F1 = Day&(A%)
		A.F2 = Month&(A%)
		A.F3 = Cost(A%)
		A.F4 = Price(A%)
		A.F5 = Mileage(A%)
		A.F6 = Flag%
		A%=A%+1
		APPEND
	UNTIL A%=11
	CLOSE
ENDP

PROC Query:(Title$,Ok$)
	dINIT Title$
	dTEXT "",Ok$,2
	dBUTTONS "No",%N,"Yes",%y
	RETURN DIALOG=%y
ENDP

